"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 2、接口协议分析.py
"""

"""
网络模型
常见接口协议
HTTP协议详解
Restful架构
"""

# 了解 - OSI七层模型 ： 物理层 -> 数据链路层 -> 网络层 -> 传输层（把数据打包发送）
#                   -> 会话层（建立管理应用程序之间的通讯） -> 表示层（代码转换，数据加密） -> 应用层（具体的服务，如HTTP、SMTP）

# 网络协议：
"""
常用接口协议：
TCP/IP ： 网络接口层  -->  网络层  -->  传输层  -->  应用层
    应用层 ： DNS（域名解析协议）、HTTP（超文本传输协议）、SMTP（邮件协议）、FTP(文本传输)
    传输层 ： 段 -- TCP：面向连接的，可靠的。基于字节流。连接时3次握手，断开时需要4次挥手。     UDP：网络电视，直播
    网络层 ： 主机到主机 - 包     ip协议
    网络接口层 ：数据链路层： 帧、物理层 - 比特流 。分为：LAN - 局域网  WAN - 广域网
"""

# 二：RPC协议 ：
"""
以本地调用的方式实现远程执行
主要用于公司内部的服务调用
优点 : 传输效率高，性能损耗低，自带负载均衡策略，更好的服务治理能力
常见的 RPC 协议：
    Dubbo ： java高性能RPC协议。Apache开源项目，阿里捐赠
    gRPC ： 高性能通用RPC框架。Google开源项目
    Thrift ： 与 gRPC 类似的多语言RPC框架。Apache 开源项目，Facebook 捐赠
"""

# HTTP协议  ->  超文本传输协议  80          HTTPS ： HTTP + SSL/HLS（安全）  443
"""
请求
    请求行 ： method：请求方法    url：请求url    protocol:协议：如 HTTP 1.1
    请求方法 ： GET POST PUT DELETE HEAD
    请求头 ： Host Cokkie User-Agent
    请求参数 ： query - 拼接在 url 里
    请求体 ： JSON  XML  FORM
响应
    响应状态行
    响应头 : cookie  token   -  参数传递
    响应体 ： 接口测试 - 断言
    
URL
    URI : 统一资源标识符，用来唯一的标识一个资源
    URL : 统一资源定位符，它是一种具体的URI     URL 是 URI 的一种
    URL 结构 ： https://www.baidu.com/s?wd=霍格沃兹&rsv_spt=1
        1. 协议 ： https
        2. 域名 ： www.baidu.com   或者 ip 
        3. 端口 ： 跟在域名后面，域名与端口之间使用：  非必填 - HTTP 默认80端口。 HTTPS协议 - 默认443端口
        4. 路径 ： /s   又叫资源 , 路由
        5. 请求参数 ： wd=霍格沃兹&rsv_spt=1


请求 - 客户端：
请求行 ：包含请求方法，URL，协议版本 ：  > GET  /uploads/user/avatar/31438/8216a3.jpg  HTTP/1.1
请求头：(header:鉴权信息、数据格式)
    Host - 主机和端口号 : > ceshiren.com
    Connection - 链接类型 : > keep-alive 长连接，保持连接状态
    User-Agent - 客户端名称 ：> Mozilla/5.0
    cookie - 用户 cookie 信息 ：> user_id=xx;
    Accept-Language - 语言种类 ：> zh-CN - 中文 ， EN - 英文
    Content-Type POST 数据类型 ：> application/x-www-form-urlencoded   multipart/form-data  application/json 
    
空一行
请求体：
    params 拼接在 URL 中
    请求体 ： body : 使用data/json格式
    
响应 - 服务端：
状态行 ： http 版本 和 响应码 ： > HTTP/1.1 200 OK
响应头 ： 
    Connection : 链接类型
    Content-Type : 表示发送数据的格式
    Keep-Alive : 连接过期时间
空一行
响应体：
    body：服务端向客户端返回的内容  -  接口测试时取出来，用作接口断言依据
"""

"""
# HTTP 响应状态码 ： 
    1xx : 临时响应，表示通知信息，请求收到了或正在进行处理
    2xx : 表示成功
    301 ： 永久重定向
    302 ： 临时重定向
    403 ： 客户端未授权
    404 ： 在服务端未找到请求的资源
    500 ： 服务端内部错误
    503 ： 服务不可用
"""

# 一：RESTful架构 ：借助于 HTTP 协议的基本请求方法代表资源的状态切换。
# 一句话概括 ： 使用URL去定义资源，然后使用 HTTP 协议的基本请求方法去操作资源
"""
get ：获取资源
post ：创建资源：新增或者更新
put ：更新资源
delete ： 删除资源
"""

# 常用工具

"""
网络监听 ： 偏底层  ： TcpDump + WireShark
代理 Proxy ： 
    推荐使用 ： 手动测试 ： charles[全平台]    安全测试 ： burpsuite[全平台]
    自动化测试 ： mitproxy
    其他代理 ： fiddler[仅window]
    
协议客户端工具 :  curl、postman

"""
